<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>内置对象</title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}

			.round {
				border-radius: 50%;
				border: 1px solid #000;
				margin: 100px auto;
				width: 400px;
				height: 400px;
				position: relative;
			}

			.little-r {
				width: 20px;
				height: 20px;
				background-color: #f00;
				border-radius: 50%;
				position: absolute;
				left: 0;
				top: 0;
			}
		</style>
	</head>
	<body>
		<p>
			2023年12月25日 14:49:49 星期一
		</p>
		<input type="text">

		<script>
			
			let st = 'Hello World'
			
			let res =  st.padStart(20,'6')
			
			console.log(res);
			
		</script>
		<!-- 
		
		
		 ## 1 - 内置对象
		 ### 1.1 内置对象
		 ​		 JavaScript 中的对象分为3种：**自定义对象 、内置对象、 浏览器对象**
		 ​		前面两种对象是JS 基础 内容，属于 ECMAScript；  第三个浏览器对象属于 JS 独有的，
		 
		  JS API 讲解内置对象就是指 JS 语言自带的一些对象，这些对象供开发者使用，并提供了一些常用
		  的或是**最基本而必要的功能**（属性和方法），内置对象最大的优点就是帮助我们快速开发
		 ​	 	JavaScript 提供了多个内置对象：Math、 Date 、Array、String等	
		 
		### 1.2 Math对象
		​		Math 对象不是构造函数，它具有数学常数和函数的属性和方法。
		跟数学相关的运算（求绝对值，取整、最大值等）可以使用 Math 中的成员。
			
			| Math.PI                  | 圆周率                                       |
			| ------------------------ | -------------------------------------------- |
			| Math.floor()  *          | 向下取整  -数会变小                                   |
			| Math.ceil()   *          | 向上取整                                     |
			| Math.round()  *          | 四舍五入版 就近取整   注意 -3.5   结果是  -3 |
			| Math.abs()               | 绝对值                                       |
			| Math.max()/Math.min() *  | 求最大和最小值                               |
			| Math.random()        *** | 获取范围在[0,1)内的随机值  
			Math.sqrt(x)         开平方根
			Math.pow(x,y)	    Math.pow(x,y)  求 x 的  y次方的 结果
			
			parseFloat()     将一个字符串转换成 数字 能够转换小数
			var str = "FF";
			console.log(parseInt(str, 16));//十六进制转十进制
			var str1 = "12";
			console.log(parseInt(str1));//字符串转十进制
			var num = 255;
			console.log(num.toString(16));// 十进制转十六进制
			console.log(num.toString(16).toUpperCase());// 十进制转十六进制，再转大写
			let num  = 1.54545
			num.toFixed(2)    //1.54   将一个数保留2位小数   得到的结果是字符串 
			
			Math.cos(x)
			Math.sin(x)
			Math.tan(x)
			周长  2 PI  = 360弧度   PI/180
			弧度= 角度 * Math.PI / 180;
			角度 = 弧度 * 180 / Math.PI;
			isNaN()  判断是否是NaN
			
			
		### 1.3 日期对象  ***
		​	 	Date 对象和 Math 对象不一样，Date是一个构造函数，所以使用时需要实例化后才能使用其中具体方法和属性。
				Date 实例用来处理日期和时间.
				①获取当前时间
				var now = new Date();
				②获取指定时间的日期对象
				var future = new Date('2021/8/19');
				获取之后 通过get获取 具体的各项时间属性
				let date =  new Date()
				console.log('获取年份',date.getFullYear());
				console.log('获取月份',date.getMonth());  //月份从0开始
				console.log('获取日期',date.getDate());
				console.log('获取星期',date.getDay()); // 星期天为0  国外从星期天开始
				console.log('获取时',date.getHours());
				console.log('获取分',date.getMinutes());
				console.log('获取秒',date.getSeconds());
				通过Date实例获取总毫秒数  项目中经常用
				
				- 总毫秒数的含义
				
				  ​	基于1970年1月1日（世界标准时间）起的毫秒数
				
				  1000毫秒 = 1秒
				例如 如何 获取 两个时间的时间差
				let now = new Date()
				let next = new Date(2023,0,22)
				let times = next - now
				let day = Math.floor(times/1000/60/60/24)
				let hours = Math.floor((times/1000/60/60)%24)
				let minter = Math.floor((times/1000/60)%60)
				console.log(day,hours,minter);
		### 1.4 数组对象Array
		#### 创建数组的两种方式
			① var arr = [1,"test",true];
			② var arr = new Array();
		一，检测数组是否为数组
		1.instanceof 运算符
		- instanceof 可以判断一个对象是否是某个构造函数的实例
			var arr = [1, 23];
			var obj = {};
			console.log(arr instanceof Array); // true
			console.log(obj instanceof Array); // false
		2. Array.isArray()
		- Array.isArray()用于判断一个对象是否为数组，isArray() 是 HTML5 中提供的方法
			var arr = [1, 23];
			var obj = {};
			console.log(Array.isArray(arr));   // true
			console.log(Array.isArray(obj));   // false
		3.constructor 
		​    console.log(arr.constructor == Array);//true
		​    console.log(myObj.constructor == Array);//false
		4. tostring 方法
		​    console.log(Object.prototype.toString.call(arr));//[object Array]
		​    console.log(Object.prototype.toString.call(myObj));//[object Object]
		二，添加删除数组元素的方法  
		push、unshift为增加元素方法；pop、shift为删除元素的方法
		三， 数组排序
			sort方法需要传入参数来设置升序、降序排序
			- 如果传入“function(a,b){ return a-b;}”，则为升序
			- 如果传入“function(a,b){ return b-a;}”，则为降序
			arr.reverse() 为反序
		四，数组索引方法
			arr.indexOf(num)   获取  num 再数组 arr 里面 的位置 如果不存在num  返回 -1
			arr.lastIndefOf()  如果存在 返回索引值 不存在返回-1
			
			includes
		五，数组转换字符串 
			arr.toString() 
			 arr.join('连接符')  join方法如果不传入参数，则按照 “ , ”拼接元素
		六，其他方法
		arr.concat(arr1,arr2)   链接两个或多个数组 返回一个新的数组 不影响原数组
		arr.slice(开始索引,结束索引)    数组截取  返回一个被截取的新数组
		arr.splice(开始索引,删除个数)   返回被删除的项目的新数组  会影响旧的 数组
  		七，数组的遍历  
			forEach  forEach循环，循环数组中每一个元素并采取操作， 没有返回值， 可以不用知道数组长度,他有三个参数
			***map  map() 方法返回一个新数组，数组中的元素为原始数组元素调用函数处理后的值。
				let arr = [1,2,5,9,8,6,7]
				let newArr = arr.map(function(item,index){
					console.log(item,index);
					return item*5
				})
				结果： 得到的newArr  [5,10,25,45,40,30,35]
			***filter  filter 方法是 Array 对象内置方法，它会返回通过过滤的元素，不改变原来的数组。
				let arr = [1,2,5,9,8,6,7]
				let newArr = arr.filter(function(item,index){
					console.log(item,index);
					return item>5
				})
				结果：newArr  [9,8,6,7]
			***some    some() 方法用于检测数组中的元素是否满足指定条件（函数提供）,返回 boolean 值，不改变原数组。
				let arr = [1,2,5,9,8,6,7]
				let flag = arr.some(function(item,index){
					console.log(item,index);
					return item>5
				})
				结果：flag  为true    只有当 arr里面 所有的元素 都不满足条件 flag 才会等于 false
			***every every() 方法用于检测数组所有元素是否都符合指定条件（通过函数提供），返回 boolean 值，不改变原数组。
				let arr = [1,2,5,9,8,6,7]
				let flag = arr.every(function(item,index){
					console.log(item,index);
					return item>5
				})
				结果：flag  为false    只有当 arr里面 所有的元素 都满足条件 flag 才会等于 true
			****find
				
			reduce reduce() 方法接收一个函数作为累加器，数组中的每个值（从左到右）开始缩减，最终计算为一个值。
				let num = list.reduce(function(total,item,index){
					return item.age>=18?total + item.age:total
				},0)
			reduceRight reduceRight()方法,和 reduce() 功能是一样的，它是从数组的末尾处向前开始计算。
			
		### 1.5 字符串对象
		
		#### 基本包装对象
		​		为了方便操作基本数据类型，JavaScript 还提供了三个特殊的引用类型：String、Number和 Boolean。
		​		基本包装类型就是把简单数据类型包装成为复杂数据类型，这样基本数据类型就有了属性和方法
			按道理基本数据类型是没有属性和方法的，而对象才有属性和方法，但有些代码却可以执行方法，这是因为被包装对象包装过
		方法	描述
		/*
		let st = 'hello world'
		charAt()	返回在指定位置的字符。
			let newSt = a1.charAt(1)   //'e'
		charCodeAt()	返回在指定的位置的字符的 Unicode 编码。
			let num = a1.charCodeAt(1)  //101
		fromCharCode()	将 Unicode 编码转为字符。
			let st = String.fromCharCode(33)   //'!'
		concat()	连接两个或更多字符串，并返回新的字符串。
			let newSt = st.concat('yeyeye')  //'hello worldyeyeye'
		endsWith()	判断当前字符串是否是以指定的子字符串结尾的（区分大小写）。
			let bool= st.endsWith('world')  //true
		startsWith()	查看字符串是否以指定的子字符串开头。
			let bool= st.startsWith('hello')  //true
		indexOf()	返回某个指定的字符串值在字符串中首次出现的位置。
			let index= st.indexOf('wor')  //6
		lastIndexOf()	从后向前搜索字符串，并从起始位置（0）开始计算返回字符串最后出现的位置。
			let index= st.lastIndexOf('wor') //6
		includes()	查找字符串中是否包含指定的子字符串。
			let bool= st.includes('wo2r')   //false
		repeat()	复制字符串指定次数，并将它们连接在一起返回。
			let newSt= st.repeat(2)  //'hello worldhello world'
		slice()	提取字符串的片断，并在新的字符串中返回被提取的部分。
			let newSt= st.slice(4,8)  //owor
		split()	把字符串分割为字符串数组。
			let arr= st.split(' ')  // ['hello', 'world']
		substr(sta,num)	从起始索引号sta提取字符串中指定数目num的字符。
			let newSt= st.substr(3,6)  // 'lo wor'
		substring(sta,end)	提取字符串中两个指定的索引号之间的字符 包含开始不包含结束索引。
			let newSt= st.substring(3,8)   //'lo wo'
		toLowerCase()	把字符串转换为小写。
			'HELLO WORLD'.toLowerCase()  //'hello world'
		toUpperCase()	把字符串转换为大写。
			let newSt= st.toUpperCase() //'HELLO WORLD'
		trim()	去除字符串两边的空白。
			let st1 = '   sss   '
			let newSt  = st1.trim()   //'sss'
		replace() 查找字符串里面的 特定字符 并且将其替换 只查一次
			let newSt  = st.replace('0','5')  //'hell5 world'
		replaceAll() 查找字符串里面的 所有的特定字符 并且将其替换   查询全部
			let newSt  = st.replaceAll('0','5')  //'hell5 w5rld'
		padEnd()   
			let newSt  = st.padEnd(15,'5')  //'hello world5555'
		padStart()
			let newSt  = st.padEnd(15,'5')  //'5555hello world'
		*/
		 -->

	</body>
</html>